package com.dys.testlinkedlist05;

import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;

/**
 * @className: com.dys.testlinkedlist05.LinkedListTest
 * @description: com.dys.testlinkedlist05
 * @author: pine cone
 * @version: v1.0.0
 * @createTime: 2024/08/01 下午11:33
 */
public class LinkedListTest {
    /**
     * 这是一个main()方法,是应用程序的入口
     *
     * @param args 方法的形参列表,是一个字符串数组,包含了从命令行传递给程序的参数
     */
    public static void main(String[] args) {
        new LinkedListTest().testLinkedListMethod();
    }

    /**
     * LinkedList 常用方法：
     * 增：addFirst(E e)、addLast(E e)、offer(E e)、offerFirst(E e)、offerLast(E e)
     * 删：removeFirst()、removeLast()、poll()、peekFirst()、peekLast()
     * 改：
     * 查：get(int index)、element()、getFirst()、getLast()、indexOf(Object o)、lastIndexOf(Object o)、peek()
     * peekFirst()、peekLast()
     * 判断：isElementIndex(int index)
     */
    public void testLinkedListMethod() {
        List list = new LinkedList();
        list.add(1);
        list.add(12);
        list.add(13);
        list.add(14);
        list.add(9.9);
        list.add("abc");
        System.out.println(list);

        LinkedList<String> linkedList = new LinkedList<>();
        linkedList.add("abc");
        linkedList.add("def");
        linkedList.add("def");
        linkedList.add("ghi");
        linkedList.add("jkl");
        linkedList.add("mno");
        System.out.println(linkedList);
        // 增
        linkedList.addFirst("AAAAAA");
        System.out.println("---------头部添加-----------");
        System.out.println(linkedList);
        System.out.println("---------尾部添加-------------");
        linkedList.addLast("ZZZZZZZZ");
        System.out.println(linkedList);
        System.out.println("--------尾部添加---------");
        linkedList.offer("BBBBBBB");
        System.out.println(linkedList);
        System.out.println("-------头部添加------------");
        linkedList.offerFirst("aaAAAAAAA");
        System.out.println(linkedList);
        System.out.println("-------尾部添加-----------");
        linkedList.offerLast("zzzzZZZZ");
        System.out.println(linkedList);

        // 删除
        System.out.println("-------删除--------");
        linkedList.remove();
        System.out.println(linkedList);
        System.out.println("-------删除头部----------");
        linkedList.removeFirst();
        System.out.println(linkedList);
        System.out.println("-------删除尾部----------");
        linkedList.removeLast();
        System.out.println(linkedList);
        System.out.println("--------poll删除--------");
        linkedList.poll();
        System.out.println(linkedList);
        System.out.println("------peekFirst()返回当前删除的第一个数据-----------");
        String s = linkedList.peekFirst();
        System.out.println("当前删除的数据：" + s);
        System.out.println(linkedList);
        System.out.println("------peekLast()返回当前删除的最后一个数据-----------");
        String s1 = linkedList.peekLast();
        System.out.println("当前删除的最后一个数据是：" + s1);
        System.out.println(linkedList);

        // 查看
        System.out.println("-------遍历查看---------");
        System.out.println("------增强for--------");
        for (String string : linkedList) {
            System.out.println(string);
        }
        System.out.println("------普通for--------");
        for (int i = 0; i < linkedList.size(); i++) {
            System.out.println(linkedList.get(i));
        }
        System.out.println("------迭代器--------");
        Iterator<String> iterator = linkedList.iterator();
        while (iterator.hasNext()) {
            System.out.println(iterator.next());
        }
        System.out.println("------迭代器for写法--------");
        for (Iterator<String> it = linkedList.iterator(); it.hasNext(); ) {
            System.out.println(it.next());
        }
        System.out.println("---------查看-----------");
        String element = linkedList.element();
        System.out.println(element);
        String first = linkedList.getFirst();
        System.out.println(first);
        String last = linkedList.getLast();
        System.out.println(last);
        int def = linkedList.indexOf("def");
        System.out.println("返回元素对应的索引：" + def);
        int def1 = linkedList.lastIndexOf("def");
        System.out.println("返回相同元素的最后一个索引：" + def1);
        String peek = linkedList.peek();
        System.out.println("返回集合中的第一个元素：" + peek);
    }
}
